Software applications at runtime can generate and record execution information for a number of purposes. For example, execution trace information, execution logs, data dumps and debug information can be generated to assist in problem determination in the event that a software application fails. However, recording such execution information routinely during the execution of a software application is burdensome and imposes a further resource requirement over and above that of the software application itself, manifesting as a requirement for further storage and processing throughput. In some environments, the burden of generating and recording execution information at execution time can be so great that it exceeds the resource requirements of the software application itself. For this reason, a decision to include facilities for the generation and recording of execution information in a software application will involve a compromise. The balance is between a resource-efficient, high performance software application and a rich set of execution information for use in, for example, problem determination. However this balance is struck for a particular software application, one of performance and reliability may be compromised.
Execution information, once generated by a software application, can be recorded in a memory associated with the software application, such as a high-speed volatile memory device. Using such memory can alleviate the effect of generating and recording execution information since read and write operations to such memory can be made quickly. However, the use of such fast volatile memory has the disadvantage that the execution information recorded in the memory is lost in the event that the software application fails. To overcome this disadvantage, a software application can record execution information to a non-volatile storage device, such as a disk storage device. However, read and write operations to such storage devices are generally much slower than those to a high-speed memory, and overall application performance can be impacted negatively.
It would therefore be advantageous to provide for the persistence of execution information generated by a software application without placing additional burdens on the software application to undertake the regular recording of such information to a non-volatile storage medium. Further, it would be advantageous to process execution information without placing additional burdens on the software application to undertake such processing.